home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / var / lib / python-support / python2.6 / rdflib / syntax / serializers / XMLSerializer.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  4.3 KB  |  106 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from __future__ import generators
  5. from rdflib.syntax.serializers import Serializer
  6. from rdflib.URIRef import URIRef
  7. from rdflib.Literal import Literal
  8. from rdflib.BNode import BNode
  9. from rdflib.util import uniq
  10. from rdflib.exceptions import Error
  11. from rdflib.syntax.xml_names import split_uri
  12. from xml.sax.saxutils import quoteattr, escape
  13.  
  14. class XMLSerializer(Serializer):
  15.     
  16.     def __init__(self, store):
  17.         super(XMLSerializer, self).__init__(store)
  18.  
  19.     
  20.     def __bindings(self):
  21.         store = self.store
  22.         nm = store.namespace_manager
  23.         bindings = { }
  24.         for predicate in uniq(store.predicates()):
  25.             (prefix, namespace, name) = nm.compute_qname(predicate)
  26.             bindings[prefix] = URIRef(namespace)
  27.         
  28.         RDFNS = URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#')
  29.         if 'rdf' in bindings:
  30.             if not bindings['rdf'] == RDFNS:
  31.                 raise AssertionError
  32.         else:
  33.             bindings['rdf'] = RDFNS
  34.         for prefix, namespace in bindings.iteritems():
  35.             yield (prefix, namespace)
  36.         
  37.  
  38.     
  39.     def serialize(self, stream, base = None, encoding = None, **args):
  40.         self.base = base
  41.         self._XMLSerializer__stream = stream
  42.         self._XMLSerializer__serialized = { }
  43.         encoding = self.encoding
  44.         write('<?xml version="1.0" encoding="%s"?>\n' % self.encoding)
  45.         write('<rdf:RDF\n')
  46.         bindings = list(self._XMLSerializer__bindings())
  47.         bindings.sort()
  48.         for prefix, namespace in bindings:
  49.             if prefix:
  50.                 write('   xmlns:%s="%s"\n' % (prefix, namespace))
  51.                 continue
  52.             self.write = write = (lambda uni: stream.write(uni.encode(encoding, 'replace')))
  53.             write('   xmlns="%s"\n' % namespace)
  54.         
  55.         write('>\n')
  56.         for subject in self.store.subjects():
  57.             self.subject(subject, 1)
  58.         
  59.         write('</rdf:RDF>\n')
  60.         del self._XMLSerializer__serialized
  61.  
  62.     
  63.     def subject(self, subject, depth = 1):
  64.         if subject not in self._XMLSerializer__serialized:
  65.             self._XMLSerializer__serialized[subject] = 1
  66.             if isinstance(subject, (BNode, URIRef)):
  67.                 write = self.write
  68.                 indent = '  ' * depth
  69.                 element_name = 'rdf:Description'
  70.                 if isinstance(subject, BNode):
  71.                     write('%s<%s rdf:nodeID="%s"' % (indent, element_name, subject))
  72.                 else:
  73.                     uri = quoteattr(self.relativize(subject))
  74.                     write('%s<%s rdf:about=%s' % (indent, element_name, uri))
  75.                 if (subject, None, None) in self.store:
  76.                     write('>\n')
  77.                     for predicate, object in self.store.predicate_objects(subject):
  78.                         self.predicate(predicate, object, depth + 1)
  79.                     
  80.                     write('%s</%s>\n' % (indent, element_name))
  81.                 else:
  82.                     write('/>\n')
  83.             
  84.         
  85.  
  86.     
  87.     def predicate(self, predicate, object, depth = 1):
  88.         write = self.write
  89.         indent = '  ' * depth
  90.         qname = self.store.namespace_manager.qname(predicate)
  91.         if isinstance(object, Literal):
  92.             attributes = ''
  93.             if object.language:
  94.                 attributes += ' xml:lang="%s"' % object.language
  95.             
  96.             if object.datatype:
  97.                 attributes += ' rdf:datatype="%s"' % object.datatype
  98.             
  99.             write('%s<%s%s>%s</%s>\n' % (indent, qname, attributes, escape(object), qname))
  100.         elif isinstance(object, BNode):
  101.             write('%s<%s rdf:nodeID="%s"/>\n' % (indent, qname, object))
  102.         else:
  103.             write('%s<%s rdf:resource=%s/>\n' % (indent, qname, quoteattr(self.relativize(object))))
  104.  
  105.  
  106.